package com.bascker.algorithm.practice.str;

import java.util.Objects;

/**
 * 检测大写字母:
 *   给定一个单词，判断单词的大写使用是否正确。以下情况视为大写用法是正确的：
 *   1. 全部字母都是大写，比如"USA"。
 *   2. 单词中所有字母都不是大写，比如"leetcode"。
 *   3. 如果单词不只含有一个字母，只有首字母大写， 比如 "Google"。
 *
 * https://gitee.com/bascker/algorithm/wikis/1%E3%80%81%E6%A3%80%E6%B5%8B%E5%A4%A7%E5%86%99%E5%AD%97%E6%AF%8D?sort_id=2967019
 *
 * @author bascker
 * @apiNote from leetcode T520
 */
public class DetectCapitalUse {

    public boolean detectCapitalUse(String word) {
        if (Objects.isNull(word) || word.length() == 0) {
            return true;
        }

        final char[] chs = word.toCharArray();
        boolean firstUp = chs[0] >= 'A' && chs[0] <= 'Z';
        int upNum = 0;
        for (int i = 0; i < chs.length; ++i) {
            char ch = chs[i];
            if (ch >= 'A' && ch <= 'Z') {
                upNum ++;
            }
        }

        // 全小写
        if (upNum == chs.length) {
            return true;
        }

        // 首字母大写、其他小写
        if (firstUp && upNum == 1) {
            return true;
        }

        // 全小写
        if (upNum == 0) {
            return true;
        }

        return false;
    }

}
